草庐IT

shell 运算符

全部标签

c++ - 我应该通过迭代器还是通过访问运算符来迭代 vector ?

我有一个vector声明为std::vectorMyVector;MyVector.push_back(5);MyVector.push_back(6);MyVector.push_back(7);我应该如何在for循环中使用它?通过迭代器对其进行迭代?for(std::vector::iteratorit=MyVector.begin();it!=MyVector.end();++it){std::cout还是通过它的访问迭代器?for(std::vector::size_typei=0;i在我在互联网上找到的示例中,它们都被使用了。它们中的一个是否在所有条件下都优于另一个?如果不是

c++ - 在赋值运算符中分配 std::shared_ptr

我正在创建自己的自定义Filter类以用于boost::filtered_graph。WeightMap概念必须具有默认构造函数、复制构造函数和赋值运算符。我创建了下面的类,它有一个std::shared_ptr私有(private)成员。我的问题是我应该如何编写赋值运算符。复制构造函数没有问题,但赋值运算符不起作用。classBFDMFilter{private:constBGraph*m_battlemap;conststd::shared_ptrm_mv_ab;public:BFDMFilter():m_battlemap(nullptr),m_mv_ab(){}BFDMFilt

c++ - C++中运算符重载的这些方法的区别

#includeusingnamespacestd;classX{inti;public:X(inta=0):i(a){}friendXoperator+(constX&left,constX&right);};Xoperator+(constX&left,constX&right)//Method1{returnX(left.i+right.i);}Xoperator+(constX&left,constX&right)//Method2{Xtemp(left.i+right.i);returntemp;}intmain(){Xa(2),b(3),c;c=a+b;c.print();

c++ - STL - 为什么对迭代器使用范围解析运算符

要访问STL迭代器,为什么我需要范围解析运算符而不是点运算符?是因为迭代器是静态的,不属于特定的类实例吗?vector::iteratormy_iterator;而不是vectornumbers;numbers.iterator; 最佳答案 点和箭头(->)运算符用于访问特定于给定实例的所有数据(成员变量、函数)。范围解析运算符用于访问特定于给定类型而非实例的所有数据(静态成员变量、静态函数、类型)。请注意,成员类型永远不会特定于实例,因此您将始终使用type::member_type来访问它们。

c++ - 使用无捕获 lambda 表达式作为条件运算符的第二个和第三个操作数时出现 MSVC 错误

下面的代码被GCC和Clang欣然接受-std=c++14但会导致VisualStudio2013出现编译错误。#include#include#includeusingnamespacestd;intmain(){autoincreasing=[](intlhs,intrhs){returnlhsrhs;};std::vectorv(0,10);boolincrease=true;std::sort(v.begin(),v.end(),increase?increasing:decreasing);return0;}错误是:main.cpp(11):errorC2446:':':no

c++ - XOR 交换算法中运算符的未定义行为?

voidswap(int*a,int*b){if(a!=b)*a^=*b^=*a^=*b;}因为上面的*a^=*b^=*a^=*b只是*a=*a^(*b=*b^(*a=*a^*b)),可以(例如)在第三个*a之前对第二个*a进行求值(对于XOR)修改(由=)?用C99/C11/C++98/C++11写有关系吗? 最佳答案 C++11标准说:5.17/1:Theassignmentoperator(=)andthecompoundassignmentoperatorsallgroupright-to-left.(...)theassi

C++ + 运算符的这种用法叫什么?目的是什么?

我最近在运算符重载评论中看到了一个例子,他们谈到+运算符本质上是一个有2个参数的函数。经过一番探索,我决定更深入地研究一下,发现像函数一样调用+确实有效,只是不是您所期望的那样...例如:intfirst=6;intsecond=9;intresult=+(second,first);//result=6这个程序集是intresult=+(second,first);moveax,dwordptr[first]movdwordptr[result],eax对+的调用只是将最后一个参数移动到eax中。谁能告诉我这个的目的和/或它叫什么? 最佳答案

c++ - 奇怪的运算符重载, "operator T& () const noexcept { return *_ptr; }"

我研究了一下,operator函数的格式是(returnvalue)operator[space]op(arguments){implementation}但是,在std::reference_wrapper实现中,有一个运算符重载函数声明为operatorT&()constnoexcept{return*_ptr;。这个运算符和T&operator()constnoexcept{return*_ptr;不同吗?}?.如果两者不同,那么第一个有什么用? 最佳答案 运算符T&()constnoexcept;是一个user-define

c++ - 为什么 cout << 不能与重载的 * 运算符一起工作?

我正在创建我的第一个类,主要由Overland的C++WithoutFear指导。我让重载的friendostreamoperatorBCDbcd(10);//bcdisinitialisedto10BCDbcd2(15);//bcd2isinitialisedto15cout有关信息,这是我的原型(prototype):BCDoperator*(intz);friendostream&operator据我所知,operator*返回BCD,因此operator 最佳答案 发生的事情是bcd*2正在生成临时BCD,无法绑定(bind

c++ - 在 C++ 中重载 -> 运算符

我看到了这段代码,但我无法理解它的作用:inlineS*O::operator->()const{returnses;//sesisaprivatememberofTypeS*}那么如果我使用->会发生什么? 最佳答案 现在如果你有Oobject;object->whatever()首先会调用重载的operator->,返回存储在对象中的ses,然后是operator->(built-在S*的情况下)将为返回的指针再次调用。所以object->whatever();相当于伪代码:object.ses->whatever();后者当然